#include <iostream>

struct Foo {
public:
    void setA(int a) {    _a = a;    }
protected:
    void setB(float b) {    _b = b;    }
private:
    void setC(double c) {    _c = c;    }
public:
    int _a;
protected:    
    float _b;
private:
    double _c;
};

int main() {
    Foo foo;//0. 创建foo对象
    //1. 对数据成员进行访问
    foo._a = 1;//ok，编译成功，可以在类之外直接访问public成员
    foo._b = 2;//error，编译报错，不能在类之外直接访问protected成员
    foo._c = 3;//error，编译报错，不能在类之外直接访问private成员
    
    //2. 对成员函数进行访问
    foo.setA(11);//ok，编译成功，可以在类之外直接访问public成员
    //编译报错，不能在类之外直接访问protected成员
    foo.setB(22.2f);//error
    //编译出错，不能在类之外直接访问private成员
    foo.setC(33.3333);//error
    return 0;
}

